﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using info.lundin.Math;

namespace Urbini.Fabio._5BI.Integrali
{
    public partial class frmIntegraliDefiniti : Form
    {
        // 0 = Rett, 1 = Trapezi, 2 = Parabole
        bool Rettangoli = true;
        double errore = 0;
        int Metodo = 0;

        public frmIntegraliDefiniti()
        {
            InitializeComponent();
            txtDX.Text = "1";
            txtSX.Text = "0";
            txtFunzione.Text = " 1 / ( x^2 + x + 1 ) ";
            txtIntervalli.Text = "20";
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Parametro p;
            try
            {
                string funzione = txtFunzione.Text;
                int nIntervalli = Convert.ToInt32(txtIntervalli.Text);
                double SX = Convert.ToDouble(txtSX.Text);
                double DX = Convert.ToDouble(txtDX.Text);

                p = new Parametro(funzione, nIntervalli, SX, DX);
                IntegraleDefinito id = new IntegraleDefinito(p);

                if(Metodo==0)
                {
                    MessageBox.Show("L'area calcolata è approssimativamente di " + Convert.ToString(id.Rettangoli));
                }
                if (Metodo==1)
                {
                    double erroreeee = new ErroreTrapezio(p, id).Error;
                    MessageBox.Show("L'area calcolata è approssimativamente di " + Convert.ToString(id.Trapezi)
                        + "\nL'errore è di " + erroreeee);
                }
                if (Metodo == 2)
                {
                    if (nIntervalli < 4 || (nIntervalli % 2 != 0)) throw new Exception();
                    ErroreParabola erroreeee = new ErroreParabola(p, id);
                    MessageBox.Show("L'area calcolata è approssimativamente di " + Convert.ToString(erroreeee.IntegraleApprossimato)
                        + "\nL'errore è di " + (erroreeee).Error);
                }
                Grafico g = new Grafico(p);
                g.ShowDialog();
            }
            catch
            {
                MessageBox.Show("Valori non validi - L'intervallo deve essere maggiore di 4 e pari");
            }
        }

        private void rdbRett_CheckedChanged(object sender, EventArgs e)
        {
            //if (rdbRett.Checked) Rettangoli = true;
            //else Rettangoli = false;
            if (rdbRett.Checked) Metodo = 0;
        }
        private void rdbTrapezi_CheckedChanged(object sender, EventArgs e)
        {
            //if (rdbTrapezi.Checked) Rettangoli = false;
            //else Rettangoli = true;
            if (rdbTrapezi.Checked) Metodo = 1;
        }
        private void rdbParabole_CheckedChanged(object sender, EventArgs e)
        {
            if (rdbParabole.Checked) Metodo = 2;
        }
        private void frmIntegraliDefiniti_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            (new frmMontecarlo()).ShowDialog();
        }
    }
}
